﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Data;
namespace ToaThuoc_PAK.Handler
{
    /// <summary>
    /// Summary description for XML_DanhSachPhieuKham
    /// </summary>
    public class XML_DanhSachPhieuKham : IHttpHandler, System.Web.SessionState.IRequiresSessionState
    {
        private DAL_PhieuKham dal_PhieuKham;
        private DAL_BenhNhan dal_BenhNhan;
        public void ProcessRequest(HttpContext context)
        {
            string Action = Factory.emptyNull(context.Request.QueryString["Action"]);
            string MaPhieu = Factory.emptyNull(context.Request.QueryString["MaPhieu"]);
            dal_PhieuKham = new DAL_PhieuKham();
            dal_BenhNhan = new DAL_BenhNhan();
            string xmlReturn = "<Root>" + "\n";
            switch (Action)
            {
                case "ViewChiTietToaThuoc":
                    xmlReturn += LayThongTinPhieu(context, MaPhieu);
                    break;
                default:
                    xmlReturn += LayDanhSachPhieu(context, MaPhieu, Action);
                    break;
            }

            xmlReturn += "</Root>";
            context.Response.ContentType = "text/xml";
            context.Response.Write(xmlReturn);
        }

        private string LayDanhSachPhieu(HttpContext context, string MaPhieu, string Action)
        {
            string xmlReturn = "";
            string MaBN = Factory.emptyNull(context.Request.QueryString["MaBN"]);
            string HoTenBN = Factory.emptyNull(context.Request.QueryString["TenBN"]);
            string BacSiKham = Factory.emptyNull(context.Request.QueryString["BacSi"]);
            string XuTri = Factory.emptyNull(context.Request.QueryString["XuTri"]);
            string TuNgay = Factory.emptyNull(context.Request.QueryString["TuNgay"]);
            string pageIndex = Factory.emptyNull(context.Request.QueryString["PageIndex"]) == "" ? "1" : context.Request.QueryString["PageIndex"];
            string DenNgay = Factory.emptyNull(context.Request.QueryString["DenNgay"]);
            string MaKhoa = Factory.emptyNull(context.Request.QueryString["MaKhoa"]);
            System.Data.DataTable dt = null;
            System.Data.DataRow[] collectionRows = null;
            int totalRows = 0;
            switch (Action)
            {
                case "":
                case "Search":
                    dt = dal_PhieuKham.TraCuuSoPhieuKham(MaPhieu, MaBN, HoTenBN, BacSiKham, MaKhoa, XuTri, TuNgay, DenNgay);
                    context.Session["TempTable"] = dt;
                    break;
                case "GetPage":
                    if (context.Session["TempTable"] != null)
                    {
                        dt = context.Session["TempTable"] as DataTable;
                    }
                    else
                    {
                        DAL_PhieuKham dal_PhieuKham2 = new DAL_PhieuKham();
                        dt = dal_PhieuKham2.TraCuuSoPhieuKham(MaPhieu, MaBN, HoTenBN, BacSiKham, MaKhoa, XuTri, TuNgay, DenNgay);
                        context.Session["TempTable"] = dt;
                    }
                    break;
            }
            int beginRow = (int.Parse(pageIndex) - 1) * 10;
            int endRow = beginRow + 10;
            totalRows = dt.Rows.Count;
            collectionRows = dt.Select("RN > " + beginRow + " AND RN <= " + endRow + "");
            foreach (System.Data.DataRow dr in collectionRows)
            {
                xmlReturn += "<DanhSachPhieuKham STT=\"" + Factory.emptyNull(dr["RN"]) + "\"" + "\n" +
                            "                      MaPK=\"" + Factory.emptyNull(dr["MaPK"]) + "\"" + "\n" +
                            "                      MaOhieuKhamChinh=\"" + Factory.emptyNull(dr["mapk_chinh"]) + "\"" + "\n" +
                            "                      MaDotKham=\"" + Factory.emptyNull(dr["MaDotKham"]) + "\"" + "\n" +
                            "                      Ngay=\"" + Factory.emptyNull(dr["Ngay"]) + "\"" + "\n" +
                            "                      MaBN=\"" + Factory.emptyNull(dr["MaBN"]) + "\"" + "\n" +
                            "                      DoiTuong=\"" + Factory.emptyNull(dr["DoiTuong"]) + "\"" + "\n" +
                            "                      HoTen=\"" + Factory.emptyNull(dr["HoTen"]) + "\"" + "\n" +
                            "                      GioiTinh=\"" + Factory.emptyNull(dr["GioiTinh"]) + "\"" + "\n" +
                            "                      NamSinh=\"" + Factory.emptyNull(dr["NamSinh"]) + "\"" + "\n" +
                            "                      SoBHYT=\"" + Factory.emptyNull(dr["SoBHYT"]) + "\"" + "\n" +
                            "                      HanBH=\"" + Factory.emptyNull(dr["HanBH"]) + "\"" + "\n" +
                            "                      XuTri=\"" + Factory.emptyNull(dr["XuTri"]) + "\"" + "\n" +
                            "                      TrieuChung=\"" + Factory.emptyNull(dr["TrieuChung"]) + "\"" + "\n" +
                            "                      ChanDoanSoBo=\"" + Factory.emptyNull(dr["ChanDoanSoBo"]) + "\"" + "\n" +
                            "                      ChanDoan=\"" + Factory.emptyNull(dr["ChanDoan"]) + "\"" + "\n" +
                            "                      ICDChanDoan=\"" + Factory.emptyNull(dr["ICDChanDoan"]) + "\"" + "\n" +
                            "                      ChanDoanPhu1=\"" + Factory.emptyNull(dr["ChanDoanPhu1"]) + "\"" + "\n" +
                            "                      ICDChanDoanPhu1=\"" + Factory.emptyNull(dr["ICDChanDoanPhu1"]) + "\"" + "\n" +
                            "                      ChanDoanPhu2=\"" + Factory.emptyNull(dr["ChanDoanPhu2"]) + "\"" + "\n" +
                            "                      ICDChanDoanPhu2=\"" + Factory.emptyNull(dr["ICDChanDoanPhu2"]) + "\"" + "\n" +
                            "                      ChiDinhDieuTri=\"" + Factory.emptyNull(dr["ChiDinhDieuTri"]) + "\"" + "\n" +
                            "                      LoiDanBS=\"" + Factory.emptyNull(dr["LoiDanBS"]) + "\"" + "\n" +
                            "                      HenTaiKham=\"" + Factory.emptyNull(dr["HenTaiKham"]) + "\"" + "\n" +
                            "                      TenBS=\"" + Factory.emptyNull(dr["TenBS"]) + "\"" + "\n" +
                            "                      LoaiPhieu=\"" + Factory.emptyNull(dr["loai_kham_cp"]) + "\"" + "\n" +
                            "                      DaKeToa=\"" + Factory.emptyNull(dr["DaKeToa"]) + "\"" + "\n" +
                            "                      KetThuc=\"" + Factory.emptyNull(dr["KetThuc"]) + "\"" + "\n" +
                            "                      ></DanhSachPhieuKham>" + "\n";

            }
            xmlReturn += "<TongSoRecord TongSo=\"" + totalRows.ToString() + "\"></TongSoRecord>";
            return xmlReturn;
        }

        private string LayThongTinPhieu(HttpContext context, string MaPhieu)
        {
            string xmlReturn = "";
            string message = "";
            DataTable dt = dal_PhieuKham.LayThongTinPhieuKham(MaPhieu);
            if (dt.Rows.Count > 0)
            {
                int SoNgayTuLucKham = 0; //Số ngày kể từ lúc tạo phiếu đến hôm nay            
                string KetThucDotKham = ""; //Kiểm tra xem phiếu này đã kết thúc đợt khám chưa            
                foreach (DataRow row in dt.Rows)
                {
                    DateTime NgayKetThuc = Convert.ToDateTime(row["Ngay"].ToString());
                    TimeSpan SoNgayChenhLech = DateTime.Now - NgayKetThuc;
                    SoNgayTuLucKham = SoNgayChenhLech.Days;
                    KetThucDotKham = Factory.emptyNull(row["KetThuc"]);
                    if (KetThucDotKham == "0" || KetThucDotKham == "")
                    {
                        //Kiểm tra cùng khoa
                        string MaKhoa = Factory.emptyNull(row["MaKhoa"]);
                        if (MaKhoa.Trim() != context.Session["MaKhoa"].ToString())
                        {
                            message = "<Message Text='Phiếu khám này của khoa khác. Không được quyền xem!'></Message>";
                            return message;
                        }
                        //Kiểm tra toa thuốc đã được bán chưa
                        string ToaBan = Factory.emptyNull(row["ToaBan"]);
                        string LoaiKham = Factory.emptyNull(row["Loai_Kham_CP"]);
                        if (ToaBan != "" && LoaiKham != "khamthem")
                        {
                            message = "<Message Text='Toa này đã được bán'></Message>";
                            return message;
                        }
                        //Kiểm tra đã kê toa thuốc chưa
                        string DaKeToa = Factory.emptyNull(row["DaKeToa"]);
                        if (DaKeToa == "true")
                        {

                        }
                        else
                        {
                        }
                        //Kiểm tra phiếu này có phải của bác sĩ đang yêu cầu xem hay không
                        string MaBS = Factory.emptyNull(row["MaBS"]);
                        if (MaBS.Trim() != context.Session["MaND"].ToString())
                        {
                            message = "<Message Text='Không thể chỉnh sửa phiếu khám của bác sĩ khác. Tạo ra 1 phiếu mới'></Message>";
                            return message;
                        }
                        //Kiểm tra số ngày chênh lệch
                        if (SoNgayTuLucKham == 0)
                        {
                            if (DaKeToa == "true")
                            {
                                message = "<Message Text='Không chỉnh sửa phiếu đã quá 3 ngày. Tạo ra 1 phiếu khám mới'></Message>";
                            }
                        }
                        else if (SoNgayTuLucKham > 0)
                        {
                            message = "<Message Text='Không thể chỉnh sửa phiếu của ngày cũ'></Message>";
                            return message;
                        }

                        xmlReturn += "<PhieuKham MaPhieuCu=\"" + Factory.emptyNull(row["MaPK"]) + "\"" + "\n" +
                        "                        MaPhieuKhamChinh=\"" + Factory.emptyNull(row["MaPK_Chinh"]) + "\"" + "\n" +
                        "                        MaThuDV=\"" + Factory.emptyNull(row["MaThuDV"]) + "\"" + "\n" +
                        "                        MaDotKham=\"" + Factory.emptyNull(row["MaDotKham"]) + "\"" + "\n" +
                        "                        MaKhoa=\"" + Factory.emptyNull(row["MaKhoa"]) + "\"" + "\n" +
                        "                        SoBHYT=\"" + Factory.emptyNull(row["SoBHYT"]) + "\"" + "\n" +
                        "                        HanBH=\"" + Factory.emptyNull(row["SoBHYT"]) + "\"" + "\n" +
                        "                        Ngay=\"" + Factory.emptyNull(row["Ngay"]) + "\"" + "\n" +
                        "                        MaBN=\"" + Factory.emptyNull(row["MaBN"]) + "\"" + "\n" +
                        "                        NguonBN=\"" + Factory.emptyNull(row["NguonBN"]) + "\"" + "\n" +
                        "                        HoTen=\"" + Factory.emptyNull(row["HoTen"]) + "\"" + "\n" +
                        "                        GioiTinh=\"" + Factory.emptyNull(row["GioiTinh"]) + "\"" + "\n" +
                        "                        NamSinh=\"" + Factory.emptyNull(row["NamSinh"]) + "\"" + "\n" +
                        "                        TrieuChung=\"" + Factory.emptyNull(row["TrieuChung"]) + "\"" + "\n" +
                        "                        ChanDoanSoBo=\"" + Factory.emptyNull(row["ChanDoanSoBo"]) + "\"" + "\n" +
                        "                        ChanDoan=\"" + Factory.emptyNull(row["ChanDoan"]) + "\"" + "\n" +
                        "                        ICDChanDoan=\"" + Factory.emptyNull(row["ICDChanDoan"]) + "\"" + "\n" +
                        "                        ChanDoanPhu1=\"" + Factory.emptyNull(row["ChanDoanPhu1"]) + "\"" + "\n" +
                        "                        ICDChanDoanPhu1=\"" + Factory.emptyNull(row["ICDChanDoanPhu1"]) + "\"" + "\n" +
                        "                        ChanDoanPhu2=\"" + Factory.emptyNull(row["ChanDoanPhu2"]) + "\"" + "\n" +
                        "                        ICDChanDoanPhu2=\"" + Factory.emptyNull(row["ICDChanDoanPhu2"]) + "\"" + "\n" +
                        "                        ChiDinhDieuTri=\"" + Factory.emptyNull(row["ChiDinhDieuTri"]) + "\"" + "\n" +
                        "                        LoiDanBS=\"" + Factory.emptyNull(row["LoiDanBS"]) + "\"" + "\n" +
                        "                        HenTaiKham=\"" + Factory.emptyNull(row["HenTaiKham"]) + "\"" + "\n" +
                        "                        TenBS=\"" + Factory.emptyNull(row["TenBS"]) + "\"" + "\n" +
                        "                        LoaiKham=\"" + Factory.emptyNull(row["loai_kham_cp"]) + "\"" + "\n" +
                        "                        DaKeToa=\"" + Factory.emptyNull(row["DaKeToa"]) + "\"" + "\n" +
                        "                        TenDichVu=\"" + Factory.emptyNull(row["TenDichVu"]) + "\"" + "\n" +
                        "                        KetThuc=\"" + Factory.emptyNull(row["KetThuc"]) + "\"" + "\n" +
                        "                        ></PhieuKham>";
                        //Lấy thông tin sinh hiệu
                        string strSinhHieu = LayThongTinSinhHieu(Factory.emptyNull(row["MaBN"]));
                        if (strSinhHieu != "") xmlReturn += strSinhHieu;
                        //Lấy chi tiết toa thuốc đã kê
                        DataTable tempToaThuoc = dal_PhieuKham.LayChiTietPhieuKham(MaPhieu, DaKeToa);
                        if (tempToaThuoc.Rows.Count > 0)
                        {
                            foreach (DataRow tempRow in tempToaThuoc.Rows)
                            {
                                xmlReturn += "<ToaThuoc ThuocID=\"" + Factory.emptyNull(row["ThuocID"]) + "\"" + "\n" +
                                "                       TenThuoc=\"" + Factory.emptyNull(row["TenThuoc"]) + "\"" + "\n" +
                                "                       DonVi=\"" + Factory.emptyNull(row["DonVi"]) + "\"" + "\n" +
                                "                       SoLuong=\"" + Factory.emptyNull(row["SoLuong"]) + "\"" + "\n" +
                                "                       CachDung=\"" + Factory.emptyNull(row["CachDung"]) + "\"" + "\n" +
                                "                       SoLanDung=\"" + Factory.emptyNull(row["SoLanDung"]) + "\"" + "\n" +
                                "                       DonViDung=\"" + Factory.emptyNull(row["DonViDung"]) + "\"" + "\n" +
                                "                       GhiChu=\"" + Factory.emptyNull(row["GhiChu"]) + "\"" + "\n" +
                                "                       SoLuongCon=\"" + Factory.emptyNull(row["SoLuongCon"]) + "\"" + "\n" +
                                "                       DonGia=\"" + Factory.emptyNull(row["GiaThamKhao"]) + "\"" + "\n" +
                                "                       ></ToaThuoc>";
                            }
                        }
                    }
                    else
                    {
                        message = "<Message Text='Bệnh nhân này đã kết thúc đợt khám, không thể sửa lại đơn thuốc'></Message>";
                        return message;
                    }
                }
                return xmlReturn;
            }
            else
            {
                return "<Message Text='Không tìm thấy phiếu khám này'></Message>";
            }
        }

        private string LayThongTinSinhHieu(string MaBN)
        {
            string strReturn = "";
            DataTable dt = dal_BenhNhan.LayThongTinSinhHieu(MaBN);
            if (dt.Rows.Count > 0)
            {
                if ((dt.Rows.Count > 0) && (dt.Rows[0]["NgaySH"].ToString()) == DateTime.Now.ToString("dd/MM/yyyy"))
                {
                    strReturn = "<SinhHieu Mach='" + Factory.emptyNull(dt.Rows[0]["Mach"]) + "' \n" +
                    "                      HuyetAp='" + Factory.emptyNull(dt.Rows[0]["HA"]) + "' \n" +
                    "                      NhietDo='" + Factory.emptyNull(dt.Rows[0]["NhietDo"]) + "' \n" +
                    "                      NhipTho='" + Factory.emptyNull(dt.Rows[0]["NhipTho"]) + "' \n" +
                    "></SinhHieu>";
                }
            }
            return strReturn;
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

    }
}